{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "zzBv5XkTGur2"
      },
      "source": [
        "# 安装和导入"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "id": "9-xShbR18N_G"
      },
      "outputs": [],
      "source": [
        "from IPython.display import clear_output\n",
        "clear_output(wait=False)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "id": "lp2cLbPS8RhG"
      },
      "outputs": [],
      "source": [
        "import pennylane as qml\n",
        "from pennylane import numpy as np\n",
        "from pennylane.templates import RandomLayers\n",
        "\n",
        "\n",
        "#import tensorflow as tf\n",
        "#from tensorflow import keras\n",
        "\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n",
        "\n",
        "sns.set_theme()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "w38G4jmvGyzk"
      },
      "source": [
        "# 导入数据文件"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "LHAjYB6-Mhy9"
      },
      "source": [
        "### 由 数据做量子卷积处理（核心）.ipynb 创建的 npy 数据文件已在此处导入。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "id": "gOJtRzhk7pXk"
      },
      "outputs": [],
      "source": [
        "x_train_final = np.load(\"x_train_final.npy\")\n",
        "y_train = np.load(\"y_train.npy\")\n",
        "\n",
        "x_test_final = np.load(\"x_test_final.npy\")\n",
        "y_test = np.load(\"y_test.npy\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "3z0DcNmj8jWB",
        "outputId": "ac50602a-fb9c-401f-f08e-1e6e5ead1d85"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "((250, 256), (250,), (65, 256), (65,))"
            ]
          },
          "execution_count": 5,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "x_train_final.shape, y_train.shape, x_test_final.shape, y_test.shape"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "oy37edV6Mu-G"
      },
      "source": [
        "#### 训练和测试数据已连接起来以进一步减小尺寸，因为 256 个特征很难在量子电路上编码。 "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Ebzr82i2LoGO",
        "outputId": "001c51ab-5872-40ee-f8a5-3ecf1fe39ebf"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "(315, 256)\n"
          ]
        }
      ],
      "source": [
        "X = np.concatenate((x_train_final, x_test_final))\n",
        "Y = np.concatenate((y_train, y_test))\n",
        "print(X.shape)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "T3C_OXBWNF90"
      },
      "source": [
        "#### 从 256 个功能中，选择了 11 个功能将进一步使用。 "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "EbIaiDf2LoGP",
        "outputId": "ed02fbfa-5b91-4223-94a4-cf1cf32b4f1c"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "(315, 11)\n"
          ]
        }
      ],
      "source": [
        "from sklearn.svm import LinearSVC\n",
        "from sklearn.feature_selection import SelectFromModel\n",
        "lsvc = LinearSVC(C=0.01, penalty=\"l1\", dual=False).fit(X, Y)\n",
        "model = SelectFromModel(lsvc, prefit=True)\n",
        "X = model.transform(X)\n",
        "print(X.shape)\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "OV0PX3SMNSif"
      },
      "source": [
        "#### 训练和测试数据再次分离。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "id": "hU8stCyPLoGQ"
      },
      "outputs": [],
      "source": [
        "x_train_final = (X[:250])\n",
        "x_test_final = (X[250:])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 284
        },
        "id": "VyDjP3oALoGS",
        "outputId": "d0fbf1c8-5ef4-4484-f268-107343a848f9"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "from matplotlib.lines import Line2D\n",
        "from matplotlib.patches import Patch\n",
        "\n",
        "colours = [\"#ec6f86\", \"#4573e7\", \"#ad61ed\"]\n",
        "\n",
        "\n",
        "def plot_points(x_train, y_train, x_test, y_test):\n",
        "    c_train = []\n",
        "    c_test = []\n",
        "\n",
        "    for y in y_train:\n",
        "        c_train.append(colours[y])\n",
        "\n",
        "    for y in y_test:\n",
        "        c_test.append(colours[y])\n",
        "\n",
        "    plt.scatter(x_train[:, 0], x_train[:, 1], c=c_train)\n",
        "    plt.scatter(x_test[:, 0], x_test[:, 1], c=c_test, marker=\"x\")\n",
        "\n",
        "    plt.xlabel(\"Feature 1\", fontsize=16)\n",
        "    plt.ylabel(\"Feature 2\", fontsize=16)\n",
        "\n",
        "    ax = plt.gca()\n",
        "    ax.set_aspect(1)\n",
        "\n",
        "    c_transparent = \"#00000000\"\n",
        "\n",
        "    custom_lines = [\n",
        "        Patch(facecolor=colours[0], edgecolor=c_transparent, label=\"Class 0\"),\n",
        "        Patch(facecolor=colours[1], edgecolor=c_transparent, label=\"Class 1\"),\n",
        "        Patch(facecolor=colours[2], edgecolor=c_transparent, label=\"Class 2\"),\n",
        "        Line2D([0], [0], marker=\"o\", color=c_transparent, label=\"Train\",\n",
        "               markerfacecolor=\"black\", markersize=10),\n",
        "        Line2D([0], [0], marker=\"x\", color=c_transparent, label=\"Test\",\n",
        "               markerfacecolor=\"black\", markersize=10),\n",
        "    ]\n",
        "\n",
        "    ax.legend(handles=custom_lines, bbox_to_anchor=(1.0, 0.75))\n",
        "\n",
        "\n",
        "plot_points(x_train_final, y_train, x_test_final, y_test)\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "6xrkEWrTNp-c"
      },
      "source": [
        "# 分类器模型说明\n",
        "\n",
        "### 在数据集中，我们有三个类别——Covid19、病毒性肺炎和正常人。\n",
        "\n",
        "### 我们的方法是将分类器分为两个不同的模型。 第一个模型将在“正常人”和“Covid19/病毒性肺炎”类之间进行分类。 第二个模型将在“Covid”和“Viral Penumonia”类之间进行分类\n",
        "\n",
        "### 这里的第一个模型用 Model-1 表示，第二个用 Model-2 表示。"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "bbj3YRynG3i0"
      },
      "source": [
        "# 分类器模型 1 所需函数"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "id": "JvoQMcWF8r4Z"
      },
      "outputs": [],
      "source": [
        "def get_angles(x):\n",
        "\n",
        "    beta0 = 2 * np.arcsin(np.sqrt(x[1] ** 2) / np.sqrt(x[0] ** 2 + x[1] ** 2 + 1e-12))\n",
        "    beta1 = -2 * np.arcsin(np.sqrt(x[1] ** 2) / np.sqrt(x[2] ** 2 + x[1] ** 2 + 1e-12))\n",
        "    beta2 = 2 * np.arcsin(np.sqrt(x[2] ** 2 + x[1] ** 2)/np.sqrt(x[0] ** 2 + x[1] ** 2 + x[2] ** 2 ))\n",
        "\n",
        "    return np.array([beta2, -beta1 / 2, beta1 / 2, -beta0 / 2, beta0 / 2])\n",
        "\n",
        "    "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "id": "WmRvuHrfG96o"
      },
      "outputs": [],
      "source": [
        "def statepreparation_1(a):\n",
        "\n",
        "        qml.Hadamard(wires=0)\n",
        "        qml.Hadamard(wires=1)\n",
        "        \n",
        "        qml.RZ(a[0], wires=0)\n",
        "        qml.RZ(a[1], wires=1)\n",
        "        qml.CNOT(wires=[0,1])\n",
        "        qml.RZ(a[0]*a[1], wires=1)\n",
        "        qml.CNOT(wires=[0,1])\n",
        "\n",
        "        qml.Hadamard(wires=0)\n",
        "        qml.Hadamard(wires=1)\n",
        "        \n",
        "        qml.RZ(a[1], wires=0)\n",
        "        qml.RZ(a[2], wires=1)\n",
        "        qml.CNOT(wires=[0,1])\n",
        "        qml.RZ(a[1]*a[2], wires=1)\n",
        "        qml.CNOT(wires=[0,1])\n",
        "        \n",
        "\n",
        "\n",
        "        qml.RY(a[0], wires=0)\n",
        "\n",
        "        qml.CNOT(wires=[0, 1])\n",
        "        qml.RY(a[1], wires=1)\n",
        "        qml.CNOT(wires=[0, 1])\n",
        "        qml.RY(a[2], wires=1)\n",
        "\n",
        "        for i in range(3,10):\n",
        "            qml.PauliX(wires=0)\n",
        "            qml.CNOT(wires=[0, 1])\n",
        "            qml.RY(a[i], wires=1)\n",
        "            qml.CNOT(wires=[0, 1])\n",
        "            qml.RY(a[i+1], wires=1)\n",
        "            qml.PauliX(wires=0)\n",
        "        "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "metadata": {
        "id": "L5MOaNj_HKa2"
      },
      "outputs": [],
      "source": [
        "def layer_1(W):\n",
        "    qml.Rot(W[0, 0], W[0, 1], W[0, 2], wires=0)\n",
        "    qml.Rot(W[1, 0], W[1, 1], W[1, 2], wires=1)\n",
        "    # qml.Rot(W[2, 0], W[2, 1], W[2, 2], wires=2)\n",
        "    \n",
        "    qml.CNOT(wires=[0, 1])\n",
        "    # qml.CNOT(wires=[0, 2])\n",
        "    # qml.CNOT(wires=[1, 2])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "metadata": {
        "id": "CjT9YycqHMvK"
      },
      "outputs": [],
      "source": [
        "dev_1 = qml.device(\"default.qubit\", wires=2)\n",
        "@qml.qnode(dev_1)\n",
        "def circuit_1(weights, x=None):\n",
        "    # Feature mapping\n",
        "    # angle = get_angles(x)\n",
        "    statepreparation_1(x)\n",
        "    # variational classifier\n",
        "    for w in weights:\n",
        "        layer_1(w)\n",
        "    \n",
        "    return qml.expval(qml.PauliZ(1))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "metadata": {
        "id": "pE4EPKw1HUH3"
      },
      "outputs": [],
      "source": [
        "def classifier_training_1(params, x=None, y=None):\n",
        "    weights = params[0]\n",
        "    bias = params[1]\n",
        "\n",
        "    out_probs = circuit_1(weights, x=x) + bias\n",
        "    return (out_probs-y)**2\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "metadata": {
        "id": "26WdKy7PHxgQ"
      },
      "outputs": [],
      "source": [
        "def classifier_prediction_1(params, x=None):\n",
        "    weights = params[0]\n",
        "    bias = params[1]\n",
        "\n",
        "    out_probs = circuit_1(weights, x=x) + bias\n",
        "\n",
        "    \n",
        "    if(out_probs>0):\n",
        "        return 1\n",
        "    else:\n",
        "        return -1"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "metadata": {
        "id": "x1jtRUU2H3rF"
      },
      "outputs": [],
      "source": [
        "def circuit_output_test(params, x=None):\n",
        "    weights = params[0]\n",
        "    bias = params[1]\n",
        "\n",
        "    out_probs = circuit(weights, x=x) + bias\n",
        "\n",
        "    return out_probs\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "metadata": {
        "id": "h8zNvXOuH7F4"
      },
      "outputs": [],
      "source": [
        "def cost_1(params, X, Y):\n",
        "\n",
        "    y_pred = np.array([classifier_training_1(params, x=X[i], y=Y[i]) for i in range(len(Y))])\n",
        "\n",
        "    cost = np.sum(y_pred) / len(Y)\n",
        "    return cost"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "metadata": {
        "id": "PnwvdZSDH-c8"
      },
      "outputs": [],
      "source": [
        "def accuracy_1(params, x_train, y_train, iter):\n",
        "\n",
        "    y_pred_train = np.array([classifier_prediction_1(params, x=x) for x in x_train])\n",
        "    acc_train = np.sum(y_pred_train==y_train) / len(y_train)\n",
        "\n",
        "    print(\"Iter=> {}   train_cost=> {}   train_acc=> {} \".format(iter+1, cost_1(params, x_train, y_train), acc_train))\n",
        "\n",
        "    return acc_train\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xaKqVa18IHz6"
      },
      "source": [
        "# 分类器模型 2 所需函数"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "metadata": {
        "id": "tMNtf9DcIDmO"
      },
      "outputs": [],
      "source": [
        "def statepreparation_2(a):\n",
        "\n",
        "        qml.Hadamard(wires=0)\n",
        "        qml.Hadamard(wires=1)\n",
        "        \n",
        "        qml.RZ(a[0], wires=0)\n",
        "        qml.RZ(a[1], wires=1)\n",
        "        qml.CNOT(wires=[0,1])\n",
        "        qml.RZ(a[0]*a[1], wires=1)\n",
        "        qml.CNOT(wires=[0,1])\n",
        "\n",
        "        qml.Hadamard(wires=0)\n",
        "        qml.Hadamard(wires=1)\n",
        "        \n",
        "        qml.RZ(a[1], wires=0)\n",
        "        qml.RZ(a[2], wires=1)\n",
        "        qml.CNOT(wires=[0,1])\n",
        "        qml.RZ(a[1]*a[2], wires=1)\n",
        "        qml.CNOT(wires=[0,1])\n",
        "        \n",
        "\n",
        "\n",
        "        qml.RY(a[0], wires=0)\n",
        "\n",
        "        qml.CNOT(wires=[0, 1])\n",
        "        qml.RY(a[1], wires=1)\n",
        "        qml.CNOT(wires=[0, 1])\n",
        "        qml.RY(a[2], wires=1)\n",
        "\n",
        "        for i in range(3,10):\n",
        "            qml.PauliX(wires=0)\n",
        "            qml.CNOT(wires=[0, 1])\n",
        "            qml.RY(a[i], wires=1)\n",
        "            qml.CNOT(wires=[0, 1])\n",
        "            qml.RY(a[i+1], wires=1)\n",
        "            qml.PauliX(wires=0)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "metadata": {
        "id": "HAXZ-a1aIQqG"
      },
      "outputs": [],
      "source": [
        "def layer_2(W):\n",
        "    qml.Rot(W[0, 0], W[0, 1], W[0, 2], wires=0)\n",
        "    qml.Rot(W[1, 0], W[1, 1], W[1, 2], wires=1)\n",
        "    # qml.Rot(W[2, 0], W[2, 1], W[2, 2], wires=2)\n",
        "    \n",
        "    qml.CNOT(wires=[0, 1])\n",
        "    # qml.CNOT(wires=[0, 2])\n",
        "    # qml.CNOT(wires=[1, 2])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 21,
      "metadata": {
        "id": "9EZJ7OJcIT62"
      },
      "outputs": [],
      "source": [
        "dev_2 = qml.device(\"default.qubit\", wires=2)\n",
        "@qml.qnode(dev_2)\n",
        "def circuit_2(weights, x=None):\n",
        "    # Feature mapping\n",
        "    # angle = get_angles(x)\n",
        "    statepreparation_2(x)\n",
        "    \n",
        "    # variational classifier\n",
        "    for w in weights:\n",
        "        layer_2(w)\n",
        "    \n",
        "    return qml.expval(qml.PauliZ(1))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 22,
      "metadata": {
        "id": "iumVNlMWIcDg"
      },
      "outputs": [],
      "source": [
        "def classifier_training_2(params, x=None, y=None):\n",
        "    weights = params[0]\n",
        "    bias = params[1]\n",
        "\n",
        "    out_probs = circuit_2(weights, x=x) + bias\n",
        "    return (out_probs-y)**2"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 23,
      "metadata": {
        "id": "aC47T9L6Ih2V"
      },
      "outputs": [],
      "source": [
        "def classifier_prediction_2(params, x=None):\n",
        "    weights = params[0]\n",
        "    bias = params[1]\n",
        "\n",
        "    out_probs = circuit_2(weights, x=x) + bias\n",
        "\n",
        "    \n",
        "    if(out_probs>0):\n",
        "        return 1\n",
        "    else:\n",
        "        return -1"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "metadata": {
        "id": "Lix_uPNYIlJT"
      },
      "outputs": [],
      "source": [
        "def cost_2(params, X, Y):\n",
        "\n",
        "    y_pred = np.array([classifier_training_2(params, x=X[i], y=Y[i]) for i in range(len(Y))])\n",
        "\n",
        "    cost = np.sum(y_pred) / len(Y)\n",
        "    return cost\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "metadata": {
        "id": "yZAVHcVOIoXE"
      },
      "outputs": [],
      "source": [
        "def accuracy_2(params, x_train, y_train, iter):\n",
        "\n",
        "    y_pred_train = np.array([classifier_prediction_2(params, x=x) for x in x_train])\n",
        "    acc_train = np.sum(y_pred_train==y_train) / len(y_train)\n",
        "\n",
        "    print(\"Iter=> {}   train_cost=> {}   train_acc=> {} \".format(iter+1, cost_2(params, x_train, y_train), acc_train))\n",
        "\n",
        "    return acc_train\n",
        "    "
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3-jPuIBwItKu"
      },
      "source": [
        "# Model-1"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3BFJgYEPKMlX"
      },
      "source": [
        "## 模型 1 的数据\n",
        "0->新冠肺炎，1->正常，2->肺炎"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "7QKas5BHO7MP"
      },
      "source": [
        "#### 此处的标签已针对 Model-1 进行了相应修改"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 26,
      "metadata": {
        "id": "DC-vze_qIrlM"
      },
      "outputs": [],
      "source": [
        "x_train_1 = np.copy(x_train_final)\n",
        "y_train_1 = []\n",
        "\n",
        "for i in range(len(y_train)):\n",
        "    if(y_train[i]==0 or y_train[i]==2):  ##Covid or pneumonia\n",
        "        y_train_1.append(-1)\n",
        "    elif(y_train[i]==1):  ##normal person\n",
        "        y_train_1.append(1)\n",
        "\n",
        "y_train_1 = np.array(y_train_1)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xhZkWLIDLjiY"
      },
      "source": [
        "## 二分类Model-1"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 27,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "YylpUnE0K7Y5",
        "outputId": "537a529a-48ea-4cd0-98b2-0793c8db202e"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "(tensor([[[-0.00515169, -0.01006952, -0.00720122],\n",
              "          [-0.00916061, -0.01111655, -0.01067855]],\n",
              " \n",
              "         [[-0.00750181, -0.00448026,  0.00972166],\n",
              "          [-0.00796183,  0.01757976, -0.00214493]]], requires_grad=True),\n",
              " 0.0)"
            ]
          },
          "execution_count": 27,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "params_1 = (0.01 * np.random.randn(2, 2, 3), 0.0)\n",
        "params_1"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 31,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "nHkAyNQ3LTbW",
        "outputId": "2a905a7d-ba4c-43db-f51a-52a52db82f93"
      },
      "outputs": [
        {
          "ename": "ValueError",
          "evalue": "cannot reshape array of size 0 into shape (2,2,3)",
          "output_type": "error",
          "traceback": [
            "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
            "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
            "\u001b[1;32m<ipython-input-31-73a248c2f3d2>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      6\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      7\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0miter\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0miters\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 8\u001b[1;33m     \u001b[0mparams_1\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0moptimizer_1\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstep\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;32mlambda\u001b[0m \u001b[0mv\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mcost_1\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mv\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx_train_1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my_train_1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams_1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      9\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     10\u001b[0m     \u001b[0mcost_list_1\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcost_1\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mparams_1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx_train_1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my_train_1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
            "\u001b[1;32mE:\\anaconda\\lib\\site-packages\\pennylane\\optimize\\gradient_descent.py\u001b[0m in \u001b[0;36mstep\u001b[1;34m(self, objective_fn, grad_fn, *args, **kwargs)\u001b[0m\n\u001b[0;32m    128\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    129\u001b[0m         \u001b[0mg\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcompute_grad\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mobjective_fn\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mgrad_fn\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mgrad_fn\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 130\u001b[1;33m         \u001b[0mnew_args\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mapply_grad\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mg\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    131\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    132\u001b[0m         \u001b[1;31m# unwrap from list if one argument, cleaner return\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
            "\u001b[1;32mE:\\anaconda\\lib\\site-packages\\pennylane\\optimize\\adagrad.py\u001b[0m in \u001b[0;36mapply_grad\u001b[1;34m(self, grad, args)\u001b[0m\n\u001b[0;32m     84\u001b[0m                 ]\n\u001b[0;32m     85\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 86\u001b[1;33m                 \u001b[0margs_new\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0munflatten\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx_new_flat\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0marg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     87\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     88\u001b[0m                 \u001b[1;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marg\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mndarray\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
            "\u001b[1;32mE:\\anaconda\\lib\\site-packages\\pennylane\\utils.py\u001b[0m in \u001b[0;36munflatten\u001b[1;34m(flat, model)\u001b[0m\n\u001b[0;32m    249\u001b[0m     \"\"\"\n\u001b[0;32m    250\u001b[0m     \u001b[1;31m# pylint:disable=len-as-condition\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 251\u001b[1;33m     \u001b[0mres\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtail\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_unflatten\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0masarray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mflat\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmodel\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    252\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtail\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    253\u001b[0m         \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Flattened iterable has more elements than the model.\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
            "\u001b[1;32mE:\\anaconda\\lib\\site-packages\\pennylane\\utils.py\u001b[0m in \u001b[0;36m_unflatten\u001b[1;34m(flat, model)\u001b[0m\n\u001b[0;32m    231\u001b[0m         \u001b[0mres\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    232\u001b[0m         \u001b[1;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mmodel\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 233\u001b[1;33m             \u001b[0mval\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mflat\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_unflatten\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mflat\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    234\u001b[0m             \u001b[0mres\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mval\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    235\u001b[0m         \u001b[1;32mreturn\u001b[0m \u001b[0mres\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mflat\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
            "\u001b[1;32mE:\\anaconda\\lib\\site-packages\\pennylane\\utils.py\u001b[0m in \u001b[0;36m_unflatten\u001b[1;34m(flat, model)\u001b[0m\n\u001b[0;32m    225\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    226\u001b[0m         \u001b[0midx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msize\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 227\u001b[1;33m         \u001b[0mres\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0marray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mflat\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[0midx\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    228\u001b[0m         \u001b[1;32mreturn\u001b[0m \u001b[0mres\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mflat\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0midx\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    229\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
            "\u001b[1;31mValueError\u001b[0m: cannot reshape array of size 0 into shape (2,2,3)"
          ]
        }
      ],
      "source": [
        "iters = 20\n",
        "optimizer_1 = qml.AdagradOptimizer(stepsize=0.5)\n",
        "\n",
        "cost_list_1 = []\n",
        "train_acc_list_1 = []\n",
        "\n",
        "for iter in range(iters):\n",
        "    params_1 = optimizer_1.step(lambda v: cost_1(v, x_train_1, y_train_1), params_1)\n",
        "\n",
        "    cost_list_1.append(cost_1(params_1, x_train_1, y_train_1))\n",
        "    train_acc_list_1.append(accuracy_1(params_1, x_train_1, y_train_1, iter))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "_0KN2j9lWI_R"
      },
      "source": [
        "## Model-1损失函数"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 33,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 286
        },
        "id": "TnQU5gmrVimZ",
        "outputId": "24808797-113b-4e1d-d5ba-c0a852059ffd"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7f90de0cbed0>]"
            ]
          },
          "execution_count": 33,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.plot(cost_list_1)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "6mQU4saMWMxy"
      },
      "source": [
        "## Model-1 的训练精度图"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 34,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 285
        },
        "id": "MPXF2BLwVoIZ",
        "outputId": "1921f230-0663-41be-9018-0bbecdcba47b"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7f90deb12a90>]"
            ]
          },
          "execution_count": 34,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.plot(train_acc_list_1)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "EuG6oxpIR95T"
      },
      "source": [
        "# Model-2"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "up0q4ehrR_9r"
      },
      "source": [
        "## 模型 2 的数据\n",
        "0->新冠肺炎，1->正常，2->肺炎"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "kqB8sMaiPHKj"
      },
      "source": [
        "#### 此处的标签已针对 Model-2 进行了相应修改"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 35,
      "metadata": {
        "id": "MG-55rGiSGaI"
      },
      "outputs": [],
      "source": [
        "x_train_2 = []\n",
        "y_train_2 = []\n",
        "\n",
        "for i in range(len(y_train)):\n",
        "    if(y_train[i]==0):   ## covid\n",
        "        x_train_2.append(x_train_final[i])\n",
        "        y_train_2.append(1)\n",
        "    elif(y_train[i]==2):  ## pneumonia\n",
        "        x_train_2.append(x_train_final[i])\n",
        "        y_train_2.append(-1)\n",
        "\n",
        "\n",
        "x_train_2 = np.array(x_train_2)\n",
        "y_train_2 = np.array(y_train_2)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "d-DYdwjIS4_T"
      },
      "source": [
        "## 二元分类器 Model-2"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 36,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "osCtRvneS3FM",
        "outputId": "1efd789b-fb89-4633-947d-bd0065212012"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "(tensor([[[-0.01642739, -0.00303444,  0.00879709],\n",
              "          [ 0.00396784,  0.03160051, -0.00861578]],\n",
              " \n",
              "         [[ 0.00302629,  0.00091985,  0.00371899],\n",
              "          [ 0.01023066, -0.00811128, -0.00915326]]], requires_grad=True), 0.0)"
            ]
          },
          "execution_count": 36,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "params_2 = (0.01 * np.random.randn(2, 2, 3), 0.0)\n",
        "params_2"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 37,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "uKoRU8xBTEiL",
        "outputId": "03f95d69-e7e9-4469-da64-86e06e1d561e"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Iter=> 1   train_cost=> 1.347974932146223   train_acc=> 0.4444444444444444 \n",
            "Iter=> 2   train_cost=> 0.9856259090057776   train_acc=> 0.6388888888888888 \n",
            "Iter=> 3   train_cost=> 0.9925207251175971   train_acc=> 0.6222222222222222 \n",
            "Iter=> 4   train_cost=> 1.004129402328754   train_acc=> 0.6166666666666667 \n",
            "Iter=> 5   train_cost=> 0.8884518646533924   train_acc=> 0.6611111111111111 \n",
            "Iter=> 6   train_cost=> 0.8091313055032515   train_acc=> 0.7 \n",
            "Iter=> 7   train_cost=> 0.7829457458090165   train_acc=> 0.7111111111111111 \n",
            "Iter=> 8   train_cost=> 0.7681887981986943   train_acc=> 0.7166666666666667 \n",
            "Iter=> 9   train_cost=> 0.7599551749217474   train_acc=> 0.7222222222222222 \n",
            "Iter=> 10   train_cost=> 0.753346260706608   train_acc=> 0.7277777777777777 \n",
            "Iter=> 11   train_cost=> 0.7492179270476366   train_acc=> 0.7388888888888889 \n",
            "Iter=> 12   train_cost=> 0.7460577481431032   train_acc=> 0.7388888888888889 \n",
            "Iter=> 13   train_cost=> 0.7437081027338572   train_acc=> 0.7444444444444445 \n",
            "Iter=> 14   train_cost=> 0.7418335293994769   train_acc=> 0.7444444444444445 \n",
            "Iter=> 15   train_cost=> 0.7403042064384163   train_acc=> 0.75 \n",
            "Iter=> 16   train_cost=> 0.7390145390398503   train_acc=> 0.75 \n",
            "Iter=> 17   train_cost=> 0.7379022344378474   train_acc=> 0.7555555555555555 \n",
            "Iter=> 18   train_cost=> 0.7369217587371343   train_acc=> 0.7555555555555555 \n",
            "Iter=> 19   train_cost=> 0.7360424737515406   train_acc=> 0.75 \n",
            "Iter=> 20   train_cost=> 0.7352414799044594   train_acc=> 0.75 \n"
          ]
        }
      ],
      "source": [
        "iters = 20\n",
        "optimizer_2 = qml.AdagradOptimizer(stepsize=0.5)\n",
        "\n",
        "cost_list_2 = []\n",
        "train_acc_list_2 = []\n",
        "\n",
        "for iter in range(iters):\n",
        "    params_2 = optimizer_2.step(lambda v: cost_2(v, x_train_2, y_train_2), params_2)\n",
        "\n",
        "    cost_list_2.append(cost_2(params_2, x_train_2, y_train_2))\n",
        "    train_acc_list_2.append(accuracy_2(params_2, x_train_2, y_train_2, iter))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RGjV2w46Wbct"
      },
      "source": [
        "## Model-2损失函数"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 38,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 285
        },
        "id": "R_d6_C8AWdv1",
        "outputId": "bd14df2f-5b7d-4a59-fee0-c632af6956ae"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7f90defe4150>]"
            ]
          },
          "execution_count": 38,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.plot(cost_list_2)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "UENuiv_wWgGX"
      },
      "source": [
        "## Model-2 训练精度图"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 39,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 285
        },
        "id": "vwcCN-_6WlC4",
        "outputId": "5912aeac-b153-4bca-feaa-86e7c22d31d6"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7f90ddfd8d50>]"
            ]
          },
          "execution_count": 39,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.plot(train_acc_list_2)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "wKuT5KBeTiQk"
      },
      "source": [
        "# 预测"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "gqLx2cuKPcVW"
      },
      "source": [
        "### 在预测时，我们首先向 Model-1 提供输入。 如果它预测为正常人，那么它是分配给输入的最终预测。 如果不是，那么我们给 Model-2 提供相同的输入，它最终预测胸部 X 光片是 Covid10 患者还是病毒性肺炎患者。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 40,
      "metadata": {
        "id": "7Y1yxaM9Tao4"
      },
      "outputs": [],
      "source": [
        "y_pred = []\n",
        "\n",
        "for i in range(len(x_test_final)):\n",
        "    tmp = classifier_prediction_1(params_1, x=x_test_final[i])\n",
        "    if (tmp == 1):  ## Normal person\n",
        "        y_pred.append(1)\n",
        "    else:   ## Covid or Pneumonia\n",
        "        tmp = classifier_prediction_2(params_2, x=x_test_final[i])\n",
        "        if(tmp == 1):  ## covid\n",
        "            y_pred.append(0)\n",
        "        elif(tmp == -1): ## Pneumonia\n",
        "            y_pred.append(2)\n",
        "\n",
        "y_pred = np.array(y_pred)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 41,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "r1trY_8EUuaM",
        "outputId": "e9a245f3-93e8-4cc3-d7e3-1fcc8d9a08f5"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Final_Test_Accuracy =>  0.49230769230769234\n"
          ]
        }
      ],
      "source": [
        "print(\"Final_Test_Accuracy => \", np.sum(y_pred==y_test)/len(y_test))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "tQzw0oEbQIAk"
      },
      "source": [
        "\n",
        "### 当它在具有更大数据集的真实计算机上进行训练时，我们希望提高这种准确性。 "
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": []
    }
  ],
  "metadata": {
    "colab": {
      "name": "quantum_classifier_1.ipynb",
      "provenance": [],
      "toc_visible": true
    },
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.8.8"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
